#ifndef CGEOMETRY_H
#define CGEOMETRY_H


#include "CConfig.hpp"
#include "CEntity.hpp"
#include <vector>


class CGeometry
{
    // Variables
    private:
    protected:
        std::size_t _nDim;
        std::size_t _nPoint;
        std::size_t _nElem;
    public:
        CEntity** point;
        std::vector<CEntity*> interface;
        std::vector< std::vector< std::vector<long int> > > bound;
        CEntity** elem;

    // Methods
    private:
    protected:
    public:
        CGeometry();
        ~CGeometry();
        void loadmesh(CConfig* config);
        void savemesh(CConfig* config);
        void setIface(void);
        std::size_t getNDim();
        std::size_t getNPoint();
        std::size_t getNElem();
        std::size_t getNIface();
        int findFace(size_t* aPointList, size_t aNPoint);
        void setPointNeighborPoint();
        void setInterfaceNormal();
        void setElemVolume();
        void setBound(CConfig* config);
        bool checkSameElem(CEntity* aElem, CEntity* bElem);
};


#include "CGeometry.inl"


#endif //: CGEOMETRY_H
